﻿//此头文件定义了寄存器、栈等原件的结构
//
#include<stdbool.h>
enum MyEnum
{
	VSTATE_UNUSE = 1,
	VSTATE_USED,
	VSTATE_CLEAR
};
enum
{
	VTYPE_OP,
	VTYPE_INT,
	VTYPE_STR,
	VTYPE_DOUBLE,
	VTYPE_ERR
};
typedef struct
{
	void* value;
	int type;
	int len;
}MValue;//一个值

typedef struct
{
	MValue value;
}MRegister;//一个寄存器
typedef struct
{
	MValue* stack;//栈内容
	int size;//当前栈大小
	int cp;
}MStack;//栈

typedef struct
{
	MValue value;
	int sta_addr;//对应栈偏移
	int state;//状态
}MVar;//一个变量
typedef struct
{
	MVar* v_list;
	int max_size;
	int cur;
}MVarList;
MValue MCreateValue(int size);
bool MSetValue(void* buf, int type, MValue* val);
bool MMallocValue(int size, MValue* val);
void MDeletValue(MValue* val);
MVarList MCreateVariableList(int size);
int MMallocVar(MVarList* vlist, int lock_sta_addr);
MValue MGetVar(MVarList vlist, int addr);
bool MSetVar(MVarList* vlist, int idx, MValue v);
void* MGetValue(MValue val);
MStack MCreateStack(int size);

#define MGET_VAL_INT(val) (int)MGetValue(val)
#define MGET_VAL_STR(val) (char*)MGetValue(val)
#define MGET_VAL_DOUBLE(val) (double)MGetValue(val)
